/*
    created: 2023/4/7
    filename: Adapt.h
    author: 李东霖
    purpose: Adapt模式的演示代码  
*/


#ifndef _ADAPT_H_
#define _ADAPT_H_

// 需要被Adapt的类
class Target
{
public:
    Target(){}
    virtual ~Target(){}

    //接口
    virtual void Request() = 0;
};

//与被Adapt对象提供不兼容接口的类
class Adaptee
{
public:
    Adaptee(){}
    ~Adaptee(){}

    void SpecialRequest();
};

//进行Adapt的类，采用组合原有接口类的方式
//他并没有继承我们的接口类而是传入了接口类对象的指针
//我们就可以使用这个指针在这个类中使用接口类函数
class Adapter:public Target
{
public: 
    Adapter(Adaptee* pAdaptee):m_pAdptee(pAdaptee){}
    virtual ~Adapter();

    virtual void Request();
private:
    Adaptee* m_pAdptee;
};


//进行Adapt的类，采用继承原有接口类的方式
//他私有继承了接口类，在类中可以直接使用这个类的所有接口函数
class Adapter1:public Target,private Adaptee
{
public: 
    Adapter1(){}
    virtual ~Adapter1(){}
    virtual void Request();
};

#endif //!_ADAPT_H_